﻿//#include <stdio.h>
//
//int main()
//{
//	int  n, q;
//	scanf_s("%d %d", &n, &q);//输入教室和学促
//	int arr[n] ;//各班逃跑人数
//	for (int i = 0; i < n; i++)//逃跑各班人数存储
//	{
//		scanf("%d", &arr[i]);
//	}
//	int qujian[2][n];
//	for (int i = 0; i < n; i++)//存储学促查询教室区间
//	{
//		for (int j = 0; j < 2; j++)
//		{
//			scanf("%d", &qujian[i][j]);
//		}
//	}
//	int result[n] = {0};
//	for (int i = 0; i < n; i++)
//	{
//		int b = 0;
//		int x = qujian[i][0];
//		int y = qujian[i][1];
//		for (int a = x; a <= y; a++)
//		{
//			int z = 0;
//			result[b] = arr[a] + z;
//			 z = result[b];
//		}
//		b++;
//	}
//	for (int i = 0; i < n; i++)
//	{
//		printf("%d\n", result[i]);
//	}
//
//
//	return 0;
//}

//学促突击检查
//题目背景
//这是月黑风高的一天，很多人悄悄地从晚自习逃跑。但伟大的神黭爇淵䀜䁵濥灇皛瀄熻鑋垔曐也注意到了这一点，于是准备派学促查人。
//
//题目描述
//一共有
//n
//n 个教室，编号为 1, 2, 3, ..., n。给出每个教室逃跑的人数（可能为 0）。有若干个学促，每个学促会检查一个区间即编号从
//l
//l 到
//r
//r 的教室，求出每个学促分别能查到多少人。
//
//在本题，你只需要描述如何实现这个操作，以及如何优化操作使得计算机能够在1s(约
//	1
//	0
//	8
//	10
//	8
//	次计算)内解决此问题。
//
//	输入格式
//	第一行两个正整数
//	n
//	,
//	q
//	n, q，分别表示教室和学促的数量。
//
//	第二行
//	n
//	n 个整数，表示每个教室逃走的人数。
//
//	接下来
//	q
//	q 行，每行两个整数
//	l
//	,
//	r
//	l, r，表示这个学促查询的教室区间。
//
//	输出格式
//	输出
//	q
//	q 行，每行一个正整数表示对应学促查出的人数。
//
//	输入输出样例
//	输入 #1
//	5 5
//	3 1 6 4 0
//	1 5
//	2 4
//	1 3
//	5 5
//	4 5
//	输出 #1
//	14
//	11
//	10
//	0
//	4
//	说明 / 提示
//	保证
//	1
//	≤
//	n
//	,
//	q
//	≤
//	5
//	×
//	1
//	0
//	5
//	，
//	0
//	≤
//	a
//	i
//	≤
//	1
//	0
//	9
//	1≤n, q≤5×10
//	5
//	，0≤a
//	i
//	​
//	≤10
//	9
//	（
//	a
//	i
//	a
//	i
//	​
//	为每个教室逃跑人数）。

#include <stdio.h>

//int main()
//{
//    int n, q;
//    scanf("%d %d", &n, &q); // 读 n 和 q
//
//    int arr[n + 1]; // 用 1-based 更直观
//    for (int i = 1; i <= n; i++) {
//        scanf("%d", &arr[i]);
//    }
//
//    int qujian[q][2]; // q 个区间，每个区间两个数
//    for (int i = 0; i < q; i++) {
//        scanf("%d %d", &qujian[i][0], &qujian[i][1]);
//    }
//
//    long long result[q];
//    for (int i = 0; i < q; i++) {
//        int x = qujian[i][0];
//        int y = qujian[i][1];
//        long long sum = 0;
//        for (int a = x; a <= y; a++) {
//            sum += arr[a];
//        }
//        result[i] = sum;
//    }
//
//    for (int i = 0; i < q; i++)
//    {
//        printf("%lld\n", result[i]);
//    }
//
//    return 0;
//}

//
//谁在坐小黄啊！
//简答题只需要简要阐述思路和方法即可
//
//题目背景
//早八高峰，无所事事的 Ecank 路过一食堂，发现等小黄（校巴）的人爆满。小黄从 1 号站 出发，依次停靠 n 个站。每位同学在上车时会告诉司机自己要坐几站。
//为了弄清楚每一站车上到底有多少人，Ecank 把这个任务交给了你。
//请你计算：小黄在每一站“离开时”的车上人数。
//
//题目描述
//一共有 n 个站点，编号为
//1
//,
//2
//,
//3
//,
//.
//.
//.
//,
//n
//1, 2, 3, ..., n。
//
//在第
//i
//i 个站点，有
//m
//i
//m
//i
//​
//位同学准备上车。
//
//对于每位同学，他会告诉你一个正整数
//k
//k，表示他要连续坐 k 个站（即在
//i
//i 站上车，在
//i
//+
//k
//i + k 站下车）。
//
//我们认为：
//- 每一站统计车上人数时，应当 包含刚上车的同学，
//- 但 不包含本站下车的同学
//简而言之，你的任务是：输出小黄在每一站离开时，车上有多少人。
//
//输入格式
//第一行一个正整数
//n
//n，表示站点个数。
//
//接下来
//n
//n 行，第
//i
//i 行的第一个整数
//m
//i
//m
//i
//​
//表示在第
//i
//i 站上车的人数；
//随后有
//m
//i
//m
//i
//​
//个正整数
//k
//j
//(
//    k
//    j
//>
//0
//)
//k
//j
//​
//(k
//    j
//    ​
// > 0)，表示每位同学要乘坐的站数。
//    保证：
//
//    最后一站不上人，即
//    m
//    n
//    =
//    0
//    m
//    n
//    ​
//    = 0；
//
//    - 不会坐过站：对任意在第
//    i
//    i 站上车的同学都有
//    1
//    ≤
//    k
//    j
//    ≤
//    n
//    −
//    i
//    1≤k
//    j
//    ​
//    ≤n−i。
//    输出格式
//    输出
//    n
//    n 个整数，第
//    i
//    i 个数表示小黄准备离开第
//    i
//    i 站时的车上人数。
//
//    输入输出样例
//    输入
//    5
//    1 3
//    2 2 1
//    1 2
//    1 1
//    0
//    输出
//    1 3 3 2 0

//#include <stdio.h>
//
//int main()
//{
//	int n;
//	scanf_s("%d", &n);
//	int result[3] = {100};
//	int shangche[3][100000];
//	for (int i = 1; i <= n; i++)//输入数据
//	{
//		int input = 0;
//		scanf_s("%d", &input);
//		for (int j = 1; j <= input + 1; j++)
//		{
//			scanf_s("%d", &shangche[i][j]);
//		}  
//	}
	//突然有想法了，知道怎么确立数组的列数了
   //换个思路，我直接挨个运
	//for(int i = 1;i <= n;i++)
	//{
	//	for (int j = shangche[i][2]; j < 2 * 100000 - 2 * 100000)
	//	{

	//	}
	//}这样不行，因为我先确定了数组的大小，每次都要循环最大次数，所以要将上车人数和后面的坐几站分开存储
//	return 0;
//}
//#define  _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//    int n;
//    if (scanf_s("%d", &n) != 1) 
//        return 0;
//
//    // n ≤ 2e5，额外两位防止越界
//    long long* diff = (long long*)calloc(n + 2, sizeof(long long));
//    if (!diff) return 0;
//
//    for (int i = 1; i <= n; ++i) 
//    {
//        int m;
//        scanf_s("%d", &m);
//        for (int j = 0; j < m; ++j) 
//        {
//            int k;
//            scanf_s("%d", &k);
//            diff[i] += 1;                 // 上车
//            if (i + k <= n)               // 在下车站把人数减掉（本站不计入）
//                diff[i + k] -= 1;
//        }
//    }
//
//    long long cur = 0;
//    for (int i = 1; i <= n; ++i) {
//        cur += diff[i];
//        printf("%lld", cur);
//        if (i != n) putchar(' ');
//    }
//    putchar('\n');
//
//    free(diff);
//    return 0;
//}


#include <stdio.h>

int main()
{
     int n;
	 int arr[10] = { 0 };
     
	 scanf_s("%d", &n);
	 for (int i = 1; i <= n; i++)
	{	
		 int shangche;
		scanf_s("%d", &shangche);
		arr[i] = arr[i] + shangche;
		for (int j = 1; j <= shangche; j++)
		{
			int z ;//存储第几站下车
			scanf_s("%d", &z);
 			arr[i + z] = arr[i + z] - 1;


		}
	}
	for (int i = 1; i < 6; i++)
	{
		arr[i] += arr[i - 1];
		printf(" %d ", arr[i]);
	}
	
	//接下来就到了减去下车人的时候了

	/*for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++)
		{
			printf("%d", arr[i][j]);


		}
		printf("\n");
	}*/
	return 0;
}

#include <stdio.h>

//int main()
//{
//	int n;
//	scanf_s("%d", &n);
//
//	int arr[20] = { 0 };  // 稍微开大一点，避免越界
//
//	for (int i = 1; i <= n; i++)
//	{
//		int shangche;
//		scanf_s("%d", &shangche); // 第 i 站上车人数
//
//		// 上车：在 i 站加上人数
//		arr[i] += shangche;
//
//		// 下车：每个同学有自己的下车站
//		for (int j = 0; j < shangche; j++)
//		{
//			int z;
//			scanf_s("%d", &z);
//			// 在 i + z 站减去人数
//			arr[i + z] -= 1;
//		}
//	}
//
//	// 前缀和：统计每站离开时的车上人数
//	for (int i = 1; i <= n; i++)
//	{
//		arr[i] += arr[i - 1];  // 累加上前一站
//		printf("%d ", arr[i]); // 输出离开该站时人数
//	}
//	printf("\n");
//
//	return 0;
//}
